<?php
namespace app\admin\controller;

use think\facade\Request;

/**
 * 分页处理
 * Class Paginate
 * @package app\admin\controller
 */
class Paginate {
    // 分页默认限制数量
    const LIMIT_DEFAULT = [10,100];

    /**
     * 获取列表信息
     * @param $dbQuerybas
     * @param null $order
     * @param string $limit
     * @return array
     */
    static function getList($dbQuerybas,$order = null,$limit = 'limit') {
        $count =  $dbQuerybas->count();
        $list = [];
        if($count) {
            if(!$order) {
                $order = 'id desc';
            }
            $list = $dbQuerybas->order($order)->paginate(self::getLimit($limit))->items();
        }
        return [
            "count"=>$count,
            "data"=>$list
        ];
    }

    /**
     * 获取分页限制数量
     * @param null $limit 字符串则为get对应的字段，数字则为对应的数量
     * @return int 范围必须在 LIMIT_DEFAULT 之间
     */
    static function getLimit($limit = null) {
        if(is_string($limit)) {
            $limit = Request::get($limit);
        }
        $limit = intval($limit);
        if($limit < self::LIMIT_DEFAULT[0]) {
            $limit = self::LIMIT_DEFAULT[0];
        } else if($limit > self::LIMIT_DEFAULT[1]) {
            $limit = self::LIMIT_DEFAULT[1];
        }
        return  $limit;
    }


    /**
     * 获取参数
     * @param $field
     * @param $limits
     * @return array
     */
    static function getSearchParams($field,$limits) {
        $result = [];
        $params = Request::param($field,[],"trim,strip_tags");
        foreach($limits as $key=>$value) {
            if(is_integer($key)) {
                $key = $value;
                $value = ['',''];
            }
            if(!is_array($value)) {
                $value = [$value,''];
            }
            if(count($value) != 2) {
                $value[] = '';
            }
            $keyValue = array_key_exists($key,$params)?$params[$key]:$value[0];
            switch ($value[1]) {
                case 'int':
                    $keyValue = intval($keyValue);
                    break;
                case 'str':
                    $keyValue = strval($keyValue);
                    break;
            }
            $result[$key] = $keyValue;
        }
        return $result;
    }
}